Remote Sensing Index • Water / Moisture

LSWI – Land Surface Water Index

The Land Surface Water Index (LSWI) is a water-sensitive spectral index that uses near-infrared (NIR) and shortwave infrared (SWIR) reflectance to capture changes in vegetation water content and surface moisture. It is widely used for drought monitoring, irrigation tracking and flooded area mapping. 0

1. Definition & Concept

LSWI (Land Surface Water Index) measures liquid water signal in vegetation and soil by exploiting the strong absorption of liquid water in the SWIR region and the sensitivity of the NIR region to vegetation structure.

LSWI = (NIR − SWIR) / (NIR + SWIR)

Typical LSWI values range between −1 and +1. Higher positive values usually indicate more surface water or higher canopy water content, while lower or negative values indicate dry soil, bare land or built-up areas.

Main applications

  • Monitoring crop water status and irrigation events
  • Drought and vegetation stress assessment
  • Mapping flooded rice paddies and wetlands
  • Supporting fire risk analysis and post-fire recovery studies
Type: Normalized water index (NIR–SWIR)

2. Data & Bands for LSWI

Common sensors & band combinations

  • Sentinel-2 MSI (10–20 m)
    • NIR: B8A (848–880 nm) or B8 (842 nm)
    • SWIR: B11 (1610 nm)
  • Landsat 8/9 OLI (30 m)
    • NIR: B5
    • SWIR: B6 (or B6/B7 depending on study design)

Good practice

  • Use surface reflectance products (atmospherically corrected).
  • Mask clouds, cloud shadows and snow using quality bands where available.
  • Limit the time window (e.g. within one growing season) to reduce phenology mixing.
  • Always interpret LSWI together with vegetation indices (e.g. NDVI / EVI) and land-cover data.

3. Interpretation of LSWI

Typical value ranges (example)

  • LSWI > 0.2 – water bodies, flooded areas, very wet soil / canopy
  • 0.0 – 0.2 – moist vegetation or soil with moderate water content
  • −0.2 – 0.0 – dry vegetation, sparse cover, transition to bare soil
  • < −0.2 – bare soil, rock, impervious surfaces, urban areas

Known limitations

  • Can be noisy over very bright surfaces (salt flats, deserts, snow).
  • Sensitive to strong atmospheric effects if not corrected (haze, aerosols).
  • Mixed pixels (water + vegetation + soil) require careful threshold selection.
  • Best used with multi-temporal analysis (time-series) rather than a single date only.

4. Practical tips

  • Combine LSWI with NDVI/EVI to separate open water from dense vegetation.
  • Use time-series (e.g. monthly medians) to detect flooding or irrigation events.
  • Calibrate thresholds for your region using reference samples or high-resolution imagery.
  • Export LSWI as GeoTIFF and analyze in QGIS / ArcGIS for further cartographic work.

Example workflows

  • LSWI + NDVI time-series → rice crop calendar / flooding period.
  • LSWI anomalies → drought detection compared to multi-year baseline.
  • LSWI + DEM → wetland delineation in low-lying terrain.

5. Google Earth Engine code – LSWI for any AOI (Sentinel-2)

How to use: open the Google Earth Engine Code Editor, paste the script below in a new script, draw your Area of Interest (AOI) on the map (it will appear as geometry), then click Run. You can export the LSWI layer as GeoTIFF to Google Drive.

// -------------------------------------------------------
// LSWI (Land Surface Water Index) with Sentinel-2 SR
// Any AOI drawn as 'geometry' in the map
// -------------------------------------------------------

// 1. Define Area of Interest (AOI) & date range
var roi = geometry;  // Draw a polygon/rectangle on the map
var startDate = '2023-01-01';
var endDate   = '2023-12-31';

// 2. Cloud masking function for Sentinel-2 SR
function maskS2clouds(image) {
  var scl = image.select('SCL');
  // Remove clouds, cloud shadows, cirrus, snow
  var mask = scl.neq(3)  // cloud shadow
    .and(scl.neq(8))     // medium/high clouds
    .and(scl.neq(9))     // thin cirrus
    .and(scl.neq(10))    // snow
    .and(scl.neq(11));   // snow/ice
  return image.updateMask(mask);
}

// 3. Load Sentinel-2 SR collection and create a median composite
var s2 = ee.ImageCollection('COPERNICUS/S2_SR')
  .filterBounds(roi)
  .filterDate(startDate, endDate)
  .filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 30))
  .map(maskS2clouds);

var composite = s2.median().clip(roi);

// 4. Compute LSWI = (NIR - SWIR) / (NIR + SWIR)
var nir  = composite.select('B8A');   // Narrow NIR (you can also use B8)
var swir = composite.select('B11');   // SWIR band

var lswi = nir.subtract(swir)
  .divide(nir.add(swir).add(1e-6))   // add small value to avoid division by zero
  .rename('LSWI');

// 5. Visualization parameters
var lswiVis = {
  min: -1.0,
  max:  1.0,
  palette: [
    '#440154', // very dry / built-up
    '#3b528b',
    '#21908c',
    '#5dc963',
    '#fefcc9'  // very wet / water
  ]
};

// 6. Add layers to the map
Map.centerObject(roi, 9);
Map.addLayer(lswi, lswiVis, 'LSWI (Sentinel-2)', true);

// Optional: True color composite for context
var s2_rgb = s2
  .select(['B4','B3','B2'])  // R, G, B
  .median()
  .clip(roi);

Map.addLayer(s2_rgb, {min: 0, max: 3000}, 'True Color (RGB)', false);

// 7. Export LSWI as GeoTIFF to Google Drive
Export.image.toDrive({
  image: lswi,
  description: 'LSWI_Export',
  fileNamePrefix: 'LSWI_Export',
  folder: 'GEE_LSWI',
  region: roi,
  scale: 20,          // ~20 m for Sentinel-2
  crs: 'EPSG:4326',
  maxPixels: 1e13
});

🔎 يمكنك تغيير startDate و endDate، ونسبة السحب (CLOUDY_PIXEL_PERCENTAGE)، ومستوى التكبير (Map.centerObject) حسب المشروع والمنطقة الخاصة بك.